/**
 * @author Tobias Boehm
 *
 * 22.06.2011
 */
package org.anddev.andengine.extension.tbsengine.gameobject;

import java.util.EnumMap;
import java.util.HashMap;

import org.anddev.andengine.extension.tbsengine.gameobject.ability.IActiveAbility;
import org.anddev.andengine.extension.tbsengine.gameobject.ability.IPassiveAbility;
import org.anddev.andengine.extension.tbsengine.gameobject.animation.ObjectNESWanimationSet;
import org.anddev.andengine.extension.tbsengine.resource.ResourceAccount;

/**
 * An instance of this class represents a development stage of a specific
 * {@link UnitType}.<p>
 * Notice:<br>
 * This class is used by {@link UnitFactory}. You shouldn't create instances
 * of this class on your own.
 * 
 * @author Tobias Boehm
 *
 */
public class UnitTypeStage {

	public static enum BasicAnimationType{Create,Idle,Die,TakeHit};
	
	
	private final HashMap<String,IActiveAbility> mAbilityNameActiveAbilityMap = new HashMap<String, IActiveAbility>();
	private final HashMap<String,IPassiveAbility> mAbilityNamePassiveAbilityMap = new HashMap<String, IPassiveAbility>();
	
	private final int mStageID;
	private final String mName;
	private final String mDescription;
	private final int mIconTileID;
	
	private final EnumMap<BasicAnimationType, ObjectNESWanimationSet> mBasicAnimationMap = new EnumMap<BasicAnimationType, ObjectNESWanimationSet>(BasicAnimationType.class);
	private final HashMap<String,ResourceAccount> mResourceTypeNameResourceAccountMap = new HashMap<String, ResourceAccount>();
	
	
	public UnitTypeStage(final int pStageID, final String pName, final String pDescription, final int pIconTileID){
		
		this.mStageID = pStageID;
		
		this.mName = pName;
		
		this.mDescription = pDescription;
		
		this.mIconTileID = pIconTileID;
	}


	/**
	 * @return the mAbilityNameActiveAbilityMap
	 */
	public HashMap<String, IActiveAbility> getAbilityNameActiveAbilityMap() {
		return mAbilityNameActiveAbilityMap;
	}


	/**
	 * @return the mAbilityNamePassiveAbilityMap
	 */
	public HashMap<String, IPassiveAbility> getAbilityNamePassiveAbilityMap() {
		return mAbilityNamePassiveAbilityMap;
	}


	/**
	 * @return the mStageID
	 */
	public int getStageID() {
		return mStageID;
	}


	/**
	 * @return the mName
	 */
	public String getName() {
		return mName;
	}


	/**
	 * @return the mDescription
	 */
	public String getDescription() {
		return mDescription;
	}


	/**
	 * @return the mIconTileID
	 */
	public int getIconTileID() {
		return mIconTileID;
	}


	/**
	 * @return the mBasicAnimationMap
	 */
	public EnumMap<BasicAnimationType, ObjectNESWanimationSet> getBasicAnimationMap() {
		return mBasicAnimationMap;
	}


	/**
	 * @return the mResourceTypeNameResourceAccountMap
	 */
	public HashMap<String, ResourceAccount> getResourceTypeNameResourceAccountMap() {
		return mResourceTypeNameResourceAccountMap;
	}
	
}
